package point;

/**
 * 题目：将字符串 S 从第 K 位置分隔成两个子字符串，并交换这两个子字符串的位置。
 * 和反转单词相似，只是给定了索引不用再找到空格分单词。
 * 例子 ： HowAreYou K=3 -> AreYouHow
 * 思路：先反转两部分单词，然后把整个字符串反转
 */
public class ReserveChars {

    public static void main(String[] args) {
        ReserveChars reserveChars = new ReserveChars();
        System.out.println(reserveChars.reserveChars("HowAreYou", 3));
    }

    private String reserveChars(String str, int n) {
        if(str == null || str.length() == 0) {
            return str;
        }
        char[] chars = str.toCharArray();
        reserve(chars, 0, n - 1);
        reserve(chars, n, chars.length - 1);
        reserve(chars, 0, chars.length - 1);
        return new String(chars);
    }

    private void reserve(char[] chars, int i, int j) {
        while(i < j) {
            swap(chars, i++, j--);
        }
    }


    private void swap(char[] chars, int i, int j) {
        char temp = chars[i];
        chars[i] = chars[j];
        chars[j] = temp;
    }
}
